package com.zm.blog.handle;

/**
 * @Author: Sister Xiao Ming
 * @Description: 登录相关异常类，用于处理认证和授权相关的错误
 */
public class BlogLoginException extends RuntimeException{

    // 添加序列化ID，满足Serializable接口规范
    private static final long serialVersionUID = 20230616L;

    //错误状态码
    private int statusCode = 401;

    /**
     * 默认构造函数
     */
    public BlogLoginException() {
        super();
    }

    /**
     * 带错误消息的构造函数
     *
     * @param message 错误信息
     */
    public BlogLoginException(String message) {
        super(message);
    }

    /**
     * 带状态码和错误消息的构造函数
     *
     * @param statusCode HTTP状态码
     * @param message 错误信息
     */
    public BlogLoginException(int statusCode, String message) {
        super(message);
        this.statusCode = statusCode;
    }

    /**
     * 带原因的构造函数
     *
     * @param cause 原始异常
     */
    public BlogLoginException(Throwable cause) {
        super(cause);
    }

    /**
     * 带错误消息和原因的构造函数
     *
     * @param message 错误信息
     * @param cause 原始异常
     */
    public BlogLoginException(String message, Throwable cause) {
        super(message, cause);
    }

    /**
     * 带状态码、错误消息和原因的构造函数
     *
     * @param statusCode HTTP状态码
     * @param message 错误信息
     * @param cause 原始异常
     */
    public BlogLoginException(int statusCode, String message, Throwable cause) {
        super(message, cause);
        this.statusCode = statusCode;
    }

    /**
     * 获取错误信息（兼容原有接口）
     *
     * @return 错误信息字符串
     */
    public String getMsg() {
        return getMessage();
    }

    /**
     * 获取HTTP状态码
     *
     * @return HTTP状态码
     */
    public int getStatusCode() {
        return statusCode;
    }

    /**
     * 快速创建登录异常的静态工厂方法
     *
     * @param message 错误信息
     * @return 异常实例
     */
    public static BlogLoginException of(String message) {
        return new BlogLoginException(message);
    }

    /**
     * 快速创建登录异常的静态工厂方法（带状态码）
     *
     * @param statusCode HTTP状态码
     * @param message 错误信息
     * @return 异常实例
     */
    public static BlogLoginException of(int statusCode, String message) {
        return new BlogLoginException(statusCode, message);
    }

    /**
     * 快速创建登录异常的静态工厂方法（带原因）
     *
     * @param cause 原始异常
     * @return 异常实例
     */
    public static BlogLoginException of(Throwable cause) {
        return new BlogLoginException(cause);
    }

    /**
     * 快速创建登录异常的静态工厂方法（带状态码和原因）
     *
     * @param statusCode HTTP状态码
     * @param message 错误信息
     * @param cause 原始异常
     * @return 异常实例
     */
    public static BlogLoginException of(int statusCode, String message, Throwable cause) {
        return new BlogLoginException(statusCode, message, cause);
    }

}
